package cz.vse.adventura.po1715.xforv00_forejt.gui._03_menu;

import cz.pecinovsky.english.pojj.adv_framework.game_txt.IPlace;
import cz.pecinovsky.english.pojj.adv_framework.gui_stage.IGUI_03_Pane;
import java.awt.BorderLayout;
import java.util.Collection;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;


/*******************************************************************************
 * Instance třídy {@code NeighborPane} představují
 * panel sousedních místností, který se přidá do hlavního
 * okna aplikace v grafickém rozhraní GUI_O3
 *
 * @author    Vladimír FOREJT
 * @version   0.00.000
 */
public class NeighborPane extends javax.swing.Box implements IGUI_03_Pane
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    /** GUI, které bude tento panel používat */
    private final GUI_03 gui;

    /** Panel zborazující sousedy prostoru, v němž se hráč nachází. */
    //private final Box neighborPane = new Box(BoxLayout.Y_AXIS);

    /** Návěští v panelu sousedů specifikující obsah daného panelu. */
    private final JLabel neighborTitle = new JLabel("===== Sousedé =====");

    private final JFrame appWindow;

//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     *Připraví panel, kde se zobrazují sousední místnosti
     */
    public NeighborPane(GUI_03 gui)
    {
        super(BoxLayout.Y_AXIS);
        this.gui = gui;
        appWindow = gui.getAppWindow();
        appWindow.add(this, BorderLayout.WEST);
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Inicializuje oblast zobrazující sousední místnosti
     */
    @Override
    public void initialize() {
        this.removeAll();
        this.add(neighborTitle);
    }

    /***************************************************************************
     * Aktualizuje oblast zobrazující sousedy aktuálního prostoru.
     */
    public void update() {
            //Nejprve vyčistí kontejner
            this.removeAll();

            //Přidá do něj znovu titulek
            this.add(neighborTitle);

            //Zjistí od hry, který prostor je aktuální ...
            IPlace actualPlace = gui.getGame().getActualPlace();

            //... a od něj získá kolekci jeho sousedů
            Collection<? extends IPlace> neighbors = actualPlace.getNeighbors();

            //"Oběhne" všechny zjištěné sousedy
            for (IPlace place:neighbors) {
                //Odsadí jej od předchozí položky...
                this.add(Box.createVerticalStrut(gui.getVerticalDistance()));

                //... a přidá do kontejneru komponentu zobrazující jeho název
                String neighborName = place.getName();
                JLabel placeLabel = new JLabel(neighborName);
                this.add(placeLabel);
            }
            appWindow.repaint();    //Zapamatuje si, že se musí překreslit...
            appWindow.validate();   //... a upozorní na změnu svůj kontejner
        }

//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================



//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        NeighborPane inst = new NeighborPane();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
